/**
 * @file 	 meter_pumps.h
 * @brief       
 * @author 	 wenbo
 * @version  1.0
 * @date 	 2025-01-16
 * 
 * @copyright Copyright (c) 2024  WENBO
 * 
 */
#include "bsp.h"


/**
 * @brief       MeterPumps 电磁计量泵驱动
 * 首先通过 xp_meter_pumps_creat 创建计量泵实例(每个实例代表一个设备) 创建时如果传入了 cb 则驱动层会创建任务轮询读取
 * 然后在计量泵使能电源情况下通过 xp_meter_pumps_set_freq 随时修改运行频率
 * 未注册回调时通过 xp_meter_pumps_get_freq 获取当前运行频率
 * 注册回调后，驱动层会回调通知上线/下线/频率变化事件
 * 通过 xp_meter_pumps_set_loop_interval 接口设置轮询间隔 (默认2000ms)
 */


typedef struct Type_MeterPumps_Def* Type_MeterPumps_CTX;

typedef enum {
    EVT_ONLINE,
    EVT_OFFLINE,
    EVT_FREQ_CHANGE
} MeterPumps_event_t;

typedef void(*meter_pumps_event_cb_t)(MeterPumps_event_t evt, void* data, void* user_data);


/********************************************************************/

Type_MeterPumps_CTX xp_meter_pumps_creat(uint8_t port, uint32_t baudrate, uint8_t slave_id, meter_pumps_event_cb_t cb, void* user_data);
void xp_meter_pumps_del(Type_MeterPumps_CTX ctx);
bool xp_meter_pumps_set_freq(Type_MeterPumps_CTX ctx, uint16_t freq);
bool xp_meter_pumps_get_freq(Type_MeterPumps_CTX ctx, uint16_t* freq);
bool xp_meter_pumps_enable_by_modbus(Type_MeterPumps_CTX ctx, bool enable);
bool xp_meter_pumps_get_state(Type_MeterPumps_CTX ctx, bool* state);
bool xp_meter_pumps_set_loop_interval(Type_MeterPumps_CTX ctx, uint32_t interval_ms);
/********************************************************************/
